home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / SUNOS / SunPtty.C < prev    next >
C/C++ Source or Header  |  1990-12-06  |  2KB  |  117 lines

  1. #include <stdio.h>
  2. #include <sgtty.h>
  3. #include <errno.h>
  4. #include <osfcn.h>
  5. #include "SunPtty.h"
  6. #include "sunptty.h"
  7.  
  8. //---- class SunOsPttyConnection ------------------------------------------
  9.  
  10. SunOsPttyConnection::SunOsPttyConnection(char *name, char **args)
  11. {
  12.     slave= sunPttySpawnSlave(name, args, &pid, &slaveTtyName, &pttychars, &tslot);
  13. }
  14.  
  15. SunOsPttyConnection::~SunOsPttyConnection()
  16. {
  17.     KillChild();
  18.     SafeDelete(slaveTtyName);
  19.     if (slave)
  20.     fclose(slave);
  21. }
  22.     
  23. int SunOsPttyConnection::GetFileNo()
  24. {
  25.     if (slave)
  26.     return fileno(slave);
  27.     return -1;
  28. }
  29.  
  30. FILE *SunOsPttyConnection::GetFile()
  31. {
  32.     return slave;
  33. }
  34.  
  35. int SunOsPttyConnection::GetPid()
  36. {
  37.     return pid;
  38. }
  39.     
  40. bool SunOsPttyConnection::SubmitToSlave(char *buf, int n)
  41. {
  42.     // SpawnSlave sets file to non blocking
  43.     
  44.     if (write(fileno(slave),buf,n) == -1) {
  45.     if (errno == EWOULDBLOCK) {
  46. #if defined(TIOCFLUSH)
  47.         ioctl(fileno(slave), TIOCFLUSH, 0);
  48. #endif /* TIOCFLUSH */
  49.         return TRUE;
  50.     }
  51.     }
  52.     return FALSE;
  53. }
  54.     
  55. int SunOsPttyConnection::Read(char *buf, int size)
  56. {
  57. #if defined(TIOCGETP)
  58.     struct sgttyb tty;
  59. #endif /* TIOCGETP */
  60.  
  61.     int n= read(fileno(slave), buf, size); 
  62. #if defined(TIOCGETP)
  63.     ioctl(fileno(slave), TIOCGETP, (char*) &tty);
  64.     mode= tty.sg_flags;
  65. #endif /* TIOCGETP */
  66.     return n;
  67. }
  68.  
  69. int SunOsPttyConnection::GetMode()
  70. {
  71.     return mode;
  72. }
  73.     
  74. void SunOsPttyConnection::KillChild()
  75. {
  76.     ::sunPttyKillChild(pid);
  77.     CleanupPtty();
  78. }
  79.  
  80. void SunOsPttyConnection::CleanupPtty()
  81. {
  82.     ::sunPttyCleanupPtty(slaveTtyName, tslot);
  83. }
  84.  
  85. bool SunOsPttyConnection::Echo()
  86. {
  87. #if defined(ECHO)
  88.     return (bool) (mode & ECHO);
  89. #else
  90.     return FALSE;
  91. #endif
  92. }
  93.  
  94. bool SunOsPttyConnection::RawOrCBreak()
  95. {
  96. #if (defined(RAW) && defined(CBREAK))
  97.     return (bool) (mode & (RAW | CBREAK));
  98. #else
  99.     return FALSE;
  100. #endif
  101. }
  102.  
  103. void SunOsPttyConnection::BecomeConsole()
  104. {
  105.     ::sunPttyBecomeConsole(slaveTtyName);    
  106. }
  107.  
  108. void SunOsPttyConnection::SetSize(int r,int c)
  109. {
  110.     ::sunPttySetSize(slaveTtyName, r, c);
  111. }
  112.  
  113. void SunOsPttyConnection::GetPttyChars(PttyChars *pc)
  114. {
  115.     *pc= pttychars;
  116. }
  117.